import wxApis from './wxApis';
// 函数防抖
export function memoizePromise(cb) {
  let promise
  return (...args) => {
    if (!promise) {
      promise = cb(...args).then(res => {
        promise = null;
        return res
      }, error => {
        promise = null;
        return Promise.reject(error);
      })
    }
    return promise;
  }
}

// export function memoizePromise(cb) {
//   let promiseResult
//   let loading = false
//   return async (...args) => {
//     if (!loading) {
//       loading = true
//       let res = await cb(...args)
//       promiseResult = res
//       loading = false
//       return res;
//     } else {
//       return new Promise((resolve, reject) => {
//         let time1 = setInterval(() => {
//           if (!loading) {
//             clearInterval(time1)
//             resolve(promiseResult)
//           }
//         }, 1000)
//       })
//     }
//   }
// }

/**
 * 获取时间戳（单位：秒）
 * @return {Number} 时间戳
 */
export function time() {
  return parseInt(Date.now() / 1000, 10);
}

/**
 * 判断时间是否在有效期
 * @param  {Number}  startAt       时间戳（单位：秒）
 * @param  {Number}  effectiveDays 有效的天数
 * @param  {Number}  effectiveTimes 有效时间（单位秒）
 * @return {Boolean}               true表示有效
 */
export function isEffective(startAt, effectiveTimes = 2 * 60) {
  // return startAt + (effectiveDays * 86400) > time();
  return startAt + (effectiveTimes) > time();
}

/**
 * 检测需要的字段是否存在且不为空
 * @param {*} params 要检测的对象
 * @param {*} keys 要检测的字段 是一个数组
 */
export function propsNotEmpty(params, keys = []) {
  for(let i = 0; i < keys.length; i++) {
    let key = keys[i];
    if (!params[key]) {
      throw new Error(`${key} is empty`);
    }
  }
}


const headersConfig = {
  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}
export async function request(url, data, methodType, headerConfig) {
    const { data: res } = await wxApis.request({
        url,
        data,
        method: methodType || 'POST',
        header: headerConfig ? { ...headersConfig, ...headerConfig } : headersConfig
    });
    if (!res.success) {
        throw new Error(res.desc || '登录失败');
    }
    return res.data;
}

export default {};